﻿#include <iostream>
#include <queue>
using namespace std;

typedef long long ll;
const int N = 1e5 + 10;
int n;
int a[N], b[N];
struct node
{
	int sum;
	int i, j;
	bool operator< (const node& x)const
	{
		return sum > x.sum;
	}
};
priority_queue<node> heap;

int main()
{
	cin >> n;
	for (int i = 1; i <= n; i++)cin >> a[i];
	for (int i = 1; i <= n; i++)cin >> b[i];

	for (int i = 1; i <= n; i++)
	{
		heap.push({ a[i] + b[1], i, 1 });
	}
	for (int k = 1; k <= n; k++)
	{
		auto t = heap.top(); heap.pop();
		int sum = t.sum;
		int i = t.i;
		int j = t.j;
		cout << sum << " ";
		if(j+1<=n)heap.push({ a[i] + b[j+1], i, j+1});

	}
	return 0;
}
//typedef long long LL;
//const int N = 1e4 + 10;
//int n, m;
//LL a[N], b[N], c[N];
//struct node
//{
//    LL f; // 函数值
//    LL num; // 函数编号
//    LL x; // 代⼊值
//    bool operator <(const node& x) const
//    {
//        // ⼩根堆，⼤元素下坠
//        return f > x.f;
//    }
//};
//priority_queue<node> heap;
//LL calc(LL i, LL x)
//{
//    return a[i] * x * x + b[i] * x + c[i];
//}
//int main()
//{
//    cin >> n >> m;
//    for (int i = 1; i <= n; i++)
//    {
//        cin >> a[i] >> b[i] >> c[i];
//    }
//    // 1. 把x = 1的值放⼊堆中
//    for (int i = 1; i <= n; i++)
//    {
//        heap.push({ calc(i, 1), i, 1 });
//    }
//    // 2. 依次拿出m个值
//    while (m--)
//    {
//        auto t = heap.top(); heap.pop();
//        LL f = t.f, num = t.num, x = t.x;
//        cout << f << " ";
//        // 把下⼀个函数值放⼊堆中
//        heap.push({ calc(num, x + 1), num, x + 1 });
//    }
//    return 0;
//}

//typedef long long LL;
//int n, k;
//LL sum = 0;
//priority_queue<int> heap;
//
//int main()
//{
//	cin >> n >> k;
//	for (int i = 0; i < n; i++)
//	{
//		int x; cin >> x;
//		sum += x;
//		if (x % 2 == 0)heap.push(x);
//	}
//	while (heap.size() != 0 && k--)
//	{
//		int t = heap.top() / 2;
//		sum -= t;
//		heap.pop();
//		if (t % 2 == 0)heap.push(t);
//	}
//	cout << sum << endl;
//	return 0;
//}
//
//using namespace std;
//
//int n, m, k;
//priority_queue<int> heap;
//int main()
//{
//	cin >> n >>m >> k;
//	for (int i = 1; i <= n; i++) {
//		int x; cin >> x;
//		heap.push(x);
//		if (heap.size() > k) heap.pop();
//	}
//	while (m--)
//	{
//		int op; cin >> op;
//		if (op == 1)
//		{
//			int x; cin >> x;
//			heap.push(x);
//			if (heap.size() > k)heap.pop();
//		}
//		else if(op==2)
//		{
//			if (heap.size() == k)cout << heap.top() << endl;
//			else cout << -1 << endl;
//		}
//	}
//	return 0;
//}